home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / XAMPP 1.4.14 / xampp-win32-1.4.14-installer.exe / xampp / phpMyAdmin / lang / sync_lang.sh < prev    next >
Linux/UNIX/POSIX Shell Script  |  2005-04-15  |  8KB  |  289 lines

  1. #!/bin/sh
  2. # $Id: sync_lang.sh,v 2.12.4.1 2005/04/16 11:48:02 lem9 Exp $
  3. ##
  4. # Shell script that synchronises all translations in phpMyAdmin
  5. ##
  6. # Any parameters (except --iconv/--recode) will be passed to grep to filter
  7. # processed translation, for example: './sync_lang.sh czech' will process only
  8. # czech translation, './sync_lang.sh -e czech -e english' will process czech
  9. # and english translations.
  10. ##
  11. # Written by Michal Cihar <nijel at users.sourceforge.net>
  12. ##
  13. # Changes:
  14. # 2004-09-22
  15. #   * default to iconv, as it doesn't break things as recode does
  16. # 2004-09-03
  17. #   * hack for hebrew
  18. # 2003-11-18
  19. #   * switch php3 -> php
  20. # 2003-04-14
  21. #   * convert only files that are needed to convert (checks mtime), --force to
  22. #     avoid this checking
  23. #   * get charset from filename when reading from file failed
  24. #   * report failed translations at the end
  25. # 2002-09-18
  26. #   * now accepts parameters --iconv/--recode for specifying which convertor
  27. #     to use
  28. # 2002-08-13
  29. #   * support for synchronisation only for selected language(s)
  30. # 2002-07-18
  31. #   * can exclude some languages from conversion
  32. # 2002-07-17
  33. #   * support for multiple convertors (recode added)
  34. ##
  35.  
  36. ##
  37. # convertor setup
  38. ##
  39. # CONVERTOR_PARAMS is used for printf and it also receives two params: source
  40. # and target charset
  41. #
  42.  
  43. case "$1" in
  44.     --iconv)
  45.         echo Using iconv on user request
  46.         CONVERTOR=iconv
  47.         # the space on following is REQUIRED
  48.         CONVERTOR_PARAMS=" -f %s -t %s"
  49.         shift
  50.         ;;
  51.     --recode)
  52.         echo Using recode on user request
  53.         echo '(please use iconv for arabic)'
  54.         CONVERTOR=recode
  55.         CONVERTOR_PARAMS=" -f %s..%s"
  56.         shift
  57.         ;;
  58.     *)
  59.         echo Using iconv as default, force with --iconv/--recode
  60.         CONVERTOR=iconv
  61.         # the space on following is REQUIRED
  62.         CONVERTOR_PARAMS=" -f %s -t %s"
  63.         ;;
  64. esac
  65.  
  66. if [ "$1" = "--force" ] ; then
  67.     FORCE=1
  68.     shift
  69. else
  70.     FORCE=0
  71. fi
  72.  
  73.  
  74. ##
  75. # names of translations to process
  76. ##
  77. # Here should be listed all translations for which conversion should be done.
  78. # The name is filename without inc.php.
  79. #
  80. BASE_TRANSLATIONS="afrikaans-iso-8859-1
  81. albanian-iso-8859-1
  82. arabic-windows-1256
  83. azerbaijani-iso-8859-9
  84. basque-iso-8859-1
  85. belarusian-windows-1251
  86. bosnian-windows-1250
  87. brazilian_portuguese-iso-8859-1
  88. bulgarian-windows-1251
  89. catalan-iso-8859-1
  90. chinese_traditional-utf-8
  91. chinese_simplified-gb2312
  92. croatian-iso-8859-2
  93. czech-utf-8
  94. danish-iso-8859-1
  95. dutch-iso-8859-1
  96. english-iso-8859-1
  97. estonian-iso-8859-1
  98. finnish-iso-8859-1
  99. french-iso-8859-1
  100. galician-iso-8859-1
  101. german-utf-8
  102. greek-iso-8859-7
  103. hebrew-iso-8859-8-i
  104. hungarian-iso-8859-2
  105. indonesian-iso-8859-1
  106. italian-iso-8859-1
  107. japanese-euc
  108. korean-euc-kr
  109. latvian-windows-1257
  110. lithuanian-windows-1257
  111. malay-iso-8859-1
  112. norwegian-iso-8859-1
  113. persian-windows-1256
  114. polish-iso-8859-2
  115. portuguese-iso-8859-1
  116. romanian-iso-8859-1
  117. russian-windows-1251
  118. serbian_cyrillic-windows-1251
  119. serbian_latin-windows-1250
  120. slovenian-iso-8859-2
  121. slovak-iso-8859-2
  122. spanish-iso-8859-1
  123. swedish-iso-8859-1
  124. thai-tis-620
  125. turkish-utf-8
  126. ukrainian-windows-1251"
  127.  
  128. ##
  129. # which translations should not be translated to utf-8
  130. ##
  131. # List here any translation that should not be converted to utf-8. The name is
  132. # same as above.
  133. #
  134. IGNORE_UTF=""
  135.  
  136. ##
  137. # which translations should not be automatically generated
  138. ##
  139. # List here any translation should not be automatically generated from base
  140. # translation for that language (usually for those which are not correctly
  141. # supported by convertor).
  142. #
  143. IGNORE_TRANSLATIONS="japanese-sjis
  144. russian-cp-866"
  145.  
  146. ##
  147. # end of configuration, you hopefully won't need to edit anything bellow
  148. ##
  149.  
  150. TEMPFILE=`mktemp /tmp/pma-sync-lang.XXXXXX`
  151.  
  152. cleanup() {
  153.     rm -f $TEMPFILE
  154. }
  155.  
  156. trap cleanup INT ABRT TERM
  157.  
  158. FAILED=""
  159.  
  160. echo "-------------------------------------------------------------------"
  161. # go through all file we should process
  162. for base in $BASE_TRANSLATIONS ; do
  163.     if [ "$#" -gt 0 ] ; then
  164.         if ( echo $base | grep -q "$@" ) ; then
  165.             true
  166.         else
  167.             continue
  168.         fi
  169.     fi
  170.     # grep language from basename
  171.     lang=$(echo $base|sed 's%-.*%%')
  172.     # which files will we create from current?
  173.     create_files=$(ls --color=none -1 $lang*.inc.php|grep -v $base.inc.php)
  174.  
  175.     for ignore in $IGNORE_TRANSLATIONS ; do
  176.         create_files=$(echo "$create_files" | grep -v $ignore)
  177.     done
  178.  
  179.     # charset of source file
  180.     src_charset=$(grep '\$charset' $base.inc.php | sed "s%^[^'\"]*['\"]\\([^'\"]*\\)['\"][^'\"]*$%\\1%")
  181.     replace_charset=$src_charset
  182.     # special case for hebrew
  183.     if [ $src_charset = 'iso-8859-8-i' ] ; then
  184.         src_charset=iso-8859-8
  185.     fi
  186.     echo "$base [charset $src_charset]"
  187.  
  188.     # do we already have utf-8 translation?
  189.     if [ $src_charset = 'utf-8' ] ; then
  190.         is_utf=yes
  191.     else
  192.         is_utf=no
  193.     fi
  194.  
  195.     # at first update existing translations
  196.     for file in $create_files ; do
  197.         # charset of destination file
  198.  
  199.         # grepping from file causes problems when it is empty...
  200.         charset=$(grep '\$charset' $file | sed "s%^[^'\"]*['\"]\\([^'\"]*\\)['\"][^'\"]*$%\\1%")
  201.         if [ -z "$charset" ] ; then
  202.             charset=$(echo $file | sed -e 's/^[^-]*-//' -e 's/\.inc\.php\?$//')
  203.         fi
  204.  
  205.         if [ $charset = 'utf-8' ] ; then
  206.             is_utf=yes
  207.         fi
  208.  
  209.         # check whether we need to update translation
  210.         if [ ! "$base.inc.php" -nt "$file" -a "$FORCE" -eq 0 -a -s "$file" ] ; then
  211.             echo " $file is not needed to update"
  212.             continue
  213.         fi
  214.  
  215.         echo -n " to $charset..."
  216.         if [ $charset = 'utf-8' ] ; then
  217.             # if we convert to utf-8, we should add allow_recoding
  218.             is_utf=yes
  219.             $CONVERTOR $(printf "$CONVERTOR_PARAMS" $src_charset $charset) < $base.inc.php| sed -e "s/$replace_charset/$charset/" -e '/\$charset/a\
  220. $allow_recoding = TRUE;' > $TEMPFILE
  221.             if [ -s $TEMPFILE ] ; then
  222.                 cat $TEMPFILE > $file
  223.                 echo done
  224.             else
  225.                 FAILED="$FAILED $file"
  226.                 echo FAILED
  227.             fi
  228.         elif [ $src_charset = 'utf-8' ] ; then
  229.             is_utf=yes
  230.             # if we convert from utf-8, we should remove allow_recoding
  231.             $CONVERTOR $(printf "$CONVERTOR_PARAMS" $src_charset $charset) < $base.inc.php| grep -v allow_recoding | sed "s/$replace_charset/$charset/" > $TEMPFILE
  232.             if [ -s $TEMPFILE ] ; then
  233.                 cat $TEMPFILE > $file
  234.                 echo done
  235.             else
  236.                 FAILED="$FAILED $file"
  237.                 echo FAILED
  238.             fi
  239.         else
  240.             # just convert
  241.             $CONVERTOR $(printf "$CONVERTOR_PARAMS" $src_charset $charset) < $base.inc.php| sed "s/$replace_charset/$charset/" > $TEMPFILE
  242.             if [ -s $TEMPFILE ] ; then
  243.                 cat $TEMPFILE > $file
  244.                 echo done
  245.             else
  246.                 FAILED="$FAILED $file"
  247.                 echo FAILED
  248.             fi
  249.         fi
  250.     done
  251.  
  252.     # now check whether we found utf-8 translation
  253.     if [ $is_utf = no ] ; then
  254.         if ( echo $IGNORE_UTF | grep -q $base ) ; then
  255.             # utf-8 should not be created
  256.             true
  257.         else
  258.             # we should create utf-8 translation
  259.             echo -n " creating utf-8 translation ... "
  260.             charset=utf-8
  261.             file=$lang-$charset.inc.php
  262.             $CONVERTOR $(printf "$CONVERTOR_PARAMS" $src_charset $charset) < $base.inc.php| sed -e "s/$replace_charset/$charset/" -e '/\$charset/a\
  263. $allow_recoding = TRUE;' > $TEMPFILE
  264.             if [ -s $TEMPFILE ] ; then
  265.                 cat $TEMPFILE > $file
  266.                 echo done
  267.             else
  268.                 FAILED="$FAILED $file"
  269.                 echo FAILED
  270.             fi
  271.         fi
  272.     fi
  273.     echo "$lang processing finished."
  274.     echo "-------------------------------------------------------------------"
  275. done
  276.  
  277. if [ -z "$FAILED" ] ; then
  278.     echo "Everything seems to went okay"
  279. else
  280.     echo "!!!SOME CONVERSION FAILED!!!"
  281.     echo "Following file were NOT updated:"
  282.     echo
  283.     echo "$FAILED"
  284.     echo
  285.     echo "!!!SOME CONVERSION FAILED!!!"
  286. fi
  287.  
  288. cleanup
  289.